package cn.bonoon.kernel.support.services;

import cn.bonoon.kernel.events.ReadEvent;
import cn.bonoon.kernel.support.entities.Persistable;

public interface IService<E extends Persistable> {

	/**
	 * 根据ID取得实体
	 * @param id
	 * @return
	 */
	E get(Long id);

	/**
	 * 自动转换值
	 * @param ope
	 * @param id
	 * @param type
	 * @return
	 */
	<O> O get(ReadEvent ope, Long id, Class<O> resultClassType) throws Exception;

	E newInstance() throws Exception;
	
	Class<E> getDomainClass();

//	/**
//	 * <pre>
//	 * 通过这个方法从业务逻辑对象里取出数据库的管理对象，取出来后事务就已经关闭；
//	 * 如果外部调用{@link EntityManager}来操作数据库，则可能会出现问题
//	 * </pre>
//	 * @return
//	 * @deprecated 使用其它方式，不建议使用这个方法
//	 */
//	EntityManager getEntityManager();
}
